// 一些公共函数
async function fetchData(url) {
    const response = await fetch(url); // 等待fetch异步请求完成
    const data = await response.json(); // 等待解析JSON数据完成
    return data
}

function isValidLongitude(longitude) {
    var regex = /^-?((180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$)/;
    return regex.test(longitude);
}
function isValidLatitude(latitude) {
    var regex = /^-?(90(\.0+)?|([1-8]?\d(\.\d+)?))$/;
    return regex.test(latitude);
}

// 生成id
function guid() {
    function s4() {
        return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); 
    }
    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();
}

// 自定义加密算法
function customEncrypt(password, key) {
    let encrypted = [];
    for (let i = 0; i < password.length; i++) {
        // 使用密钥的循环字符进行异或操作
        let keyChar = key[i % key.length];
        encrypted.push(String.fromCharCode(password.charCodeAt(i) ^ keyChar.charCodeAt(0)));
    }
    return encrypted.join("");
}

// 自定义解密算法（与加密算法相同）
function customDecrypt(encrypted, key) {
    return customEncrypt(encrypted, key); // 异或操作的特性：加密和解密相同
}

function isStrongPassword(password) {
    // 正则表达式：验证密码是否满足条件
    const hasNumber = /[0-9]/; // 至少包含一个数字
    const hasLetter = /[a-zA-Z]/; // 至少包含一个字母
    const hasSpecialChar = /[!@#$%^&*(),.?":{}|<>]/; // 至少包含一个特殊符号
    const minLength = /.{8,}/; // 长度至少为8位

    return (
        hasNumber.test(password) &&
        hasLetter.test(password) &&
        hasSpecialChar.test(password) &&
        minLength.test(password)
    );
}

function goToLogin(){
    localStorage.removeItem('token')
    alert('长时间未操作，token过期！');
    window.location.href = './login.html';
    return; // 退出函数
}